浅析混沌工程在金融领域的应用
验“金”室
文 / 中国工商银行云计算实验室 吴冕冠
当前,云原生、敏捷开发、DevOps等技术架构的日渐普及,极大地提升了线上应用的交付能力,缩短了金融业务的上线周期。但与此同时,业务敏捷化对灾备系统的设计、运行和管理模式也提出了更高要求,传统依赖数据备份的灾备方式已很难确保业务的持续高可用性和稳定性。例如,2008年8月,Netflix主要数据库故障导致DVD租赁业务中断三天,并使多个国家的用户受到影响。针对这一事件,Netflix工程师开始逐步将系统迁移至AWS,使之运行在基于微服务的新型分布式架构中。然而,这种架构虽然消除了单点故障,却也引入了新的复杂性问题,包括系统的可靠性与容错能力均有待加强。
在此背景下,“混沌工程”的概念应运而生,其通过随机对分布式系统中的服务器注入不同类型故障,可发现并修复系统中的潜在问题,从而提升整个分布式系统的高可用能力。
一、混沌工程发展历程
2010年,Netflix工程师开发了一款名为Chaos Monkey的故障注入工具,并为其搭载了随机在生产环境中终止EC2实例的功能,以使工程师们能快速了解正在构建的服务是否有足够的弹性,以及是否可以容忍计划外的故障。自此,“混沌工程”作为一门新的学科诞生, 其最终目的是建立系统抵御生产环境中湍流条件的能力。
Chaos Monkey
在此基础上,2014年Netflix团队又创建了一个全新的角色——混沌工程师(Chaos Engineering),并逐步开始向社区推广。2017年,由Netflix公司前混沌工程师们合著的Chaos Engineering一书发表,该书详细阐述了混沌工程的指导思想和实施原则。2019年,阿里巴巴开源了Chaos Blade混沌工程故障注入工具,并在开源后不久便加入了CNCF。混沌工程发展历程如图1所示。
图1 混沌工程发展历程
二、混沌工程故障注入场景分析
近年来,业界的混沌工程技术百家争鸣,并在不同领域均涌现出了各种类型的故障注入工具,目前已基本可以实现从底层硬件到操作系统软件、从单机节点到大规模集群、从技术到业务的全方位故障注入。具体来说,现阶段的故障注入场景大致可以分为基础资源、应用服务、云原生服务和云平台等四大类别(如图2所示)。
图2 混沌工程主要场景
1
基础资源
对于基础资源,混沌工程工具主要提供了操作系统层面的故障注入能力,如支持磁盘读写繁忙、CPU满载、网络延时、网络不可用等故障注入。同时,通过对操作系统注入故障,还可验证监控指标是否准确、监控维度是否完善、告警阈值是否合理、通知渠道是否可用等。
2
应用服务
对于应用服务,混沌工程工具主要面向基于Jvm、C++、Nodejs、Golang等语言开发的各种应用,提供了多种类型的故障注入能力,包括Dubbo服务调用超时或调用异常,指定方法返回延迟或异常,以及返回特定值等。例如,通过模拟调用延迟和服务不可用场景,可查看发生故障的节点或实例是否能被自动隔离、下线,以及流量调度是否正确、预案是否有效等,并观察系统整体的QPS或RT是否受到影响。在此基础上,通过缓慢增加故障节点范围,也可用于验证上游服务限流降级、熔断等是否有效。
3
云原生服务
对于云原生服务,混沌工程工具主要提供了与Kubernetes、Docker相关的故障注入能力,包括容器CPU满载、容器网络延时、丢包、Pod异常等。例如,通过模拟容器异常,可验证容器中运行的服务高可用策略是否效;通过模拟调度节点不可用,可测试调度任务是否能自动迁移到可用节点;通过模拟杀服务Pod、杀节点、增大Pod资源负载,可验证副本配置、资源限制配置以及Pod下部署的容器是否合理。
4
云平台
对于云平台,混沌工程工具主要提供了与阿里云、AWS等公有云平台相关的故障注入能力,即通过对云平台的ECS、OSS、FC等组件进行故障注入,验证在基础设施部分不可用的情况下,公有云平台能否进行用户无感的故障隔离和恢复。
三、金融行业典型应用
互联网金融时代,伴随金融产品和服务模式的不断创新,交易量大幅攀升,而传统的单体IT架构暴露出很多的不适应性。对此,业界纷纷开始应用云计算、分布式等新技术,构建分布式架构和运维体系,以支撑互联网金融业务的快速发展。在此过程中,基于混沌工程对分布式系统、云平台、云应用等进行故障注入演练,将可有效发现、解决系统中存在的潜在风险,从而避免这些问题在生产环境中被触发。混沌工程实施流程如图3所示。
图3 混沌工程实施流程
1
验证分布式系统的弹性
目前金融开放平台大多是基于分布式体系构建,而使用混沌工程工具,可对分布式系统中的服务器随机注入CPU、内存、磁盘、网络等各类故障,从而验证分布式系统在部分服务器不可用的情况下是否能正常对外提供服务。
2
增强云平台容错能力
随着云计算的日渐普及,越来越多的金融服务逐渐开始从主机向平台迁移,而云平台也随之成为金融服务的主要载体之一。对此,基于混沌工程思想对云平台进行故障注入,如随机使容器的CPU、内存、磁盘、网络等发生故障,将可帮助云平台实现自愈功能,从而在自身或运行在云平台上的容器发生故障时完成主动恢复。
3
提升应用自身高可用水平
在应用层面,通过混沌工程对应用程序进行故障注入,如接口调用返回异常、应用数据库不可用、应用程序主进程被杀等,将可验证应用在部分应用程序异常时能否在用户无感知的前提下完成修复和自愈。
综上,混沌工程作为发现系统潜在风险、提升应用系统弹性的重要手段,后续将在以分布式、云计算架构为核心的互联网体系中发挥越来越重要的作用。
更多精彩内容
FCC30+
长按左边二维码
关注我们不迷路